// 请替换您下载的C++SDK路径
#include "speech.h"
#include "voice.h"

void ASR(aip::Speech* client);
void TTS(aip::Speech* client);

int main()
{
    // 务必替换百度云控制台中新建百度语音应用的 Api Key 和 Secret Key
    aip::Speech * client = new aip::Speech("92189695", "rOuo1NfRVBHwpvyTyr50ggtI", "0noc0cd7NgowirG30kAWOpU45EAUTW4t");
    
    // 打开麦克风获取语音并设置录制时间
    // aip::Voice voice;
    // voice.get_voice(5);

    // // 打印详细请求结果，可以打开查看详细请求内容
    client->setDebug(false);
    
    // // 语音识别调用
    // ASR(client);

    //语音识别调用
    TTS(client);
    
    return 0;
}

/**
 * ASR语音识别示例
 */
void ASR(aip::Speech* client) {
    std::map<std::string, std::string> options;
    std::string file_content;
    aip::get_file_content("./recorded_audio.pcm", &file_content);
    Json::Value result = client->recognize(file_content, "pcm", 16000, options);
    std::cout << "语音识别本地文件结果:" << std::endl << result.toStyledString();
    // 提取识别结果
    if (result["err_no"].asInt() == 0) { // 检查是否成功
        std::string recognition_result = result["result"][0].asString(); // 提取识别结果
        std::cout << "中文识别结果: " << recognition_result << std::endl;

        // 如果需要将结果存储到变量中
        std::string final_result = recognition_result;
        // 你可以在这里使用 final_result 做进一步处理
    } else {
        std::cerr << "语音识别失败，错误信息: " << result["err_msg"].asString() << std::endl;
    }
}

/**
 * TTS语音合成示例
 */
void TTS(aip::Speech* client) {
    std::ofstream ofile;
    std::string file_ret;
    std::map<std::string, std::string> options;
    options["spd"] = "4";
    options["per"] = "4";
    ofile.open("./tts.mp3", std::ios::out | std::ios::binary);
    Json::Value result = client->text2audio("语音测试", options, file_ret);
    // 如果file_ret为不为空则说明合成成功，返回mp3文件内容
    if (!file_ret.empty())
    {
        // 合成成功保存文件
        ofile << file_ret;
        std::cout << "语音合成成功，打开目录下的tts.mp3文件听听看" << std::endl;
    } else {
        // 合成出错，打印错误信息
        std::cout << result.toStyledString();
    }
}